/**
 * 列表标题生成工具
 * 根据比赛数据生成相应的标题
 */

/**
 * 生成列表标题
 * @param {Array} matchList - 比赛列表
 * @returns {string} 生成的标题
 */
export function generateListTitle(matchList) {
  if (!matchList || matchList.length === 0) {
    return '暂无赛事'
  }

  const count = matchList.length
  let title = ''

  if (count === 1) {
    title = '单关'
  } else if (count === 2) {
    title = '二串一'
  } else if (count === 3) {
    title = '三串一'
  } else {
    title = `${count}串一`
  }

  // 添加比赛对阵信息
  const matchInfo = matchList.map(match => {
    return `${match.home_team_name} vs ${match.away_team_name}`
  }).join(' | ')

  return `${title} ${matchInfo}`
}

/**
 * 根据模板字符串和赛事信息生成标题
 * @param {string} template - 标题模板字符串，如："【🦑最新情报】竞彩串关推荐：主队 VS 客队+主队 VS 客队 + 主队 VS 客队 数据情况解析！"
 * @param {Array} matchList - 赛事信息列表，每个元素包含 home_team_name 和 away_team_name
 * @returns {string} 生成的标题
 */
function generateTitleFromTemplate(template, matchList) {
  if (!template || !matchList || matchList.length === 0) {
    return template || '暂无标题'
  }

  let result = template

  // 替换主队 VS 客队的模式
  const vsPattern = /主队\s*VS\s*客队/g
  let matchIndex = 0

  result = result.replace(vsPattern, () => {
    if (matchIndex < matchList.length) {
      const match = matchList[matchIndex]
      matchIndex++
      return `${match.home_team_name} VS ${match.away_team_name}`
    }
    return '主队 VS 客队' // 如果赛事信息不够，保持原样
  })

  // 如果只有一场比赛，将"串关"替换为"单关"
  if (matchList.length === 1) {
    result = result.replace(/串关/g, '单关')
  }

  return result
}

/**
 * 智能生成标题 - 根据赛事数量自动选择模板
 * @param {Array} matchList - 赛事信息列表
 * @param {string} customTemplate - 自定义模板（可选）
 * @returns {string} 生成的标题
 */
function generateSmartTitle(matchList, customTemplate = null) {
  if (!matchList || matchList.length === 0) {
    return '暂无赛事'
  }

  // 如果没有自定义模板，使用默认模板
  if (!customTemplate) {
    const count = matchList.length
    if (count === 1) {
      customTemplate = '【🦑最新情报】竞彩单关推荐：主队 VS 客队 数据情况解析！'
    } else if (count === 2) {
      customTemplate = '【🦑最新情报】竞彩串关推荐：主队 VS 客队+主队 VS 客队 数据情况解析！'
    } else {
      customTemplate = '【🦑最新情报】竞彩串关推荐：主队 VS 客队+主队 VS 客队 + 主队 VS 客队 数据情况解析！'
    }
  }

  return generateTitleFromTemplate(customTemplate, matchList)
}

/**
 * 根据专家ID和赛事信息生成标题
 * @param {string} expertId - 专家ID
 * @param {Array} matchList - 赛事信息列表
 * @param {Function} getExpertInfo - 获取专家信息的函数
 * @returns {Promise<string>} 生成的标题
 */
async function generateTitleByExpert(expertId, matchList, getExpertInfo) {
  try {
    // 获取专家信息
    const expertData = await getExpertInfo(expertId)
    
    if (!expertData || !expertData.title) {
      throw new Error('专家信息或标题模板不存在')
    }
    
    // 使用专家的标题模板生成标题
    return generateTitleFromTemplate(expertData.title, matchList)
    
  } catch (error) {
    console.error('获取专家信息失败:', error)
    throw error
  }
}

/**
 * 为数据对象添加标题字段
 * @param {Object} data - 数据对象
 * @param {Array} matchList - 比赛列表
 * @returns {Object} 添加了标题字段的数据对象
 */
function addTitleToData(data, matchList) {
  return {
    ...data,
    title: generateListTitle(matchList)
  }
}

/**
 * 为列表数据添加标题字段
 * @param {Array} list - 列表数据
 * @returns {Array} 添加了标题字段的列表数据
 */
function addTitleToList(list) {
  if (!Array.isArray(list)) {
    return list
  }

  return list.map(item => {
    if (item.matchList && Array.isArray(item.matchList)) {
      return {
        ...item,
        title: generateListTitle(item.matchList)
      }
    }
    return item
  })
}

// 导出函数
module.exports = {
  generateListTitle,
  generateTitleFromTemplate,
  generateSmartTitle,
  generateTitleByExpert,
  addTitleToData,
  addTitleToList
}
